#include "Mineiro.h"
#include "Picareta.h"
#include "Mochila.h"
#include "Isqueiro.h"
#include "Lanterna.h"
#include "Holofote.h"
#include "LataAtum.h"
#include <iostream>

using namespace std;

Mineiro::Mineiro(Bloco* posicao)
{
	this->posicao = posicao;
	this->luz = new Isqueiro();
	this->picareta = new Picareta();
	this->itemEnergia = new LataAtum();
	this->mochila = new Mochila();
	this->vigas = new AplicaViga();
	this->escadas = new AplicaEscada();
	moedas = 0;
	energia = itemEnergia->getEnergia();
}

Mineiro::~Mineiro()
{
	delete posicao;
	delete luz;
	delete picareta;
	inventario.clear();
}

void Mineiro::mover(Bloco* possivelDestino)
{
	if(possivelDestino->permiteMineiro())
		posicao = possivelDestino;
}

Luz* Mineiro::getTipoLuz()
{
	return luz;
}

Bloco* Mineiro::getPosicao()
{
	return posicao;
}

void Mineiro::setTipoLuz(Luz* luz)
{
	this->luz = luz;
}

PicaretaGeral* Mineiro::getPicareta()
{
	return picareta;
}

void Mineiro::setPicareta(PicaretaGeral* picareta)
{
	this->picareta = picareta;
}

void Mineiro::cai(int energiaPerdida)
{
	energia = energia - energiaPerdida;
}

Energia* Mineiro::getEnergia()
{
	return itemEnergia;
}

int Mineiro::getEnergiaMineiro()
{
	return energia;
}

void Mineiro::setEnergia()
{
	this->energia = itemEnergia->getEnergia();
}

void Mineiro::gastaEnergia()
{
	this->energia--;
}

void Mineiro::setEnergia(Energia* energia)
{
	this->itemEnergia = energia;
}

void Mineiro::setMochila(MochilaGeral* mochila)
{
	this->mochila = mochila;
}

MochilaGeral* Mineiro::getMochila()
{
	return mochila;
}

AplicaEscada* Mineiro::getAplicaEscada()
{
	return escadas;
}

void Mineiro::addAplicaEscada(int escadas)
{
	this->escadas->addEscadas(escadas);
}

AplicaViga* Mineiro::getAplicaViga()
{
	return vigas;
}

void Mineiro::addAplicaViga(int vigas)
{
	this->vigas->addVigas(vigas);
}

void Mineiro::setPosicao(Bloco* posicao)
{
	this->posicao = posicao;
}

void Mineiro::gastaEscada()
{
	escadas->gastaEscada();
}

void Mineiro::gastaViga()
{
	vigas->gastaViga();
}

int Mineiro::getMoedas()
{
	return moedas;
}

void Mineiro::gastaMoedas(int moedas)
{
	this->moedas -= moedas;

	if(this->moedas < 0)
		this->moedas = 0;
}

void Mineiro::setMoedas(int moedas)
{
	this->moedas = moedas;
}

void Mineiro::setEnergiaMineiro(int vida)
{
	this->energia = vida;
}